Wang Haihua
🍈 🍉🍊 🍋 🍌
朴素贝叶斯分类器是基于贝叶斯定理的分类算法的集合。它不是一个单一的算法,而是一系列的算法,所有的算法都有一个共同的原则,即每一对被分类的特征是相互独立的。
我们来考虑一个虚构的数据集,它描述了打高尔夫球时的天气条件。对于天气条件,每个元组将这些条件分类为适合(“是”)或不适合(“否”)。 下面是数据集的表格表示。
Outlook | Temperature | Humidity | Windy | Play Golf | |
---|---|---|---|---|---|
0 | Rainy | Hot | High | False | No |
1 | Rainy | Hot | High | True | No |
2 | Overcast | Hot | High | False | Yes |
3 | Sunny | Mild | High | False | Yes |
4 | Sunny | Cool | Normal | False | Yes |
5 | Sunny | Cool | Normal | True | No |
6 | Overcast | Cool | Normal | True | Yes |
7 | Rainy | Mild | High | False | No |
8 | Rainy | Cool | Normal | False | Yes |
9 | Sunny | Mild | Normal | False | Yes |
10 | Rainy | Mild | Normal | True | Yes |
11 | Overcast | Mild | High | True | Yes |
12 | Overcast | Hot | Normal | False | Yes |
13 | Sunny | Mild | High | True | No |
数据集分为特征数据和响应数据两部分。
特征数据包含数据集的所有向量(行),其中每个向量由相关特征的值组成。在上面的数据集中,特征是“天气”,“温度”,“湿度”和“有风”。
响应向量包含每一行特征矩阵的类变量(预测或输出)的值。在上面的数据集中,类变量的名字是“是否打高尔夫”。
朴素贝叶斯的基本假设是:每个因素对结果有独立的、等同的影响。
结合我们的数据集,这个概念可以理解为:
注意:朴素贝叶斯的假设在现实世界中通常是不正确的。事实上,独立性假设从来都不是正确的,但在实践中往往很有效。 现在,在讲朴素贝叶斯公式之前,了解贝叶斯定理很重要。
贝叶斯定理是在已知另一个事件发生的概率的基础上得出一个事件发生的概率。贝叶斯定理在数学上表述为:
$$P(A|B)=\frac{P(A)P(B|A)}{P(B)}$$其中A和B是事件,且P(B)≠0。 我们试图找出事件A的概率,前提是事件B为真。事件B也被称为"证据"(evidence)。
P(A)是A的先验priori(先验概率,即事件在证据出现之前的概率)。证据是一个未知实例的属性值(这里是事件B)。P(A|B)是B的后验概率posteriori,即看到证据后事件的概率。 现在,对于数据集,我们可以这样应用贝叶斯定理: $$P(y|X)=\frac{P(y)P(X|y)}{P(X)}$$
式中,y是类变量,X是相关的特征向量(大小为n),其中: $$X=(x_1,x_2,....,x_n)
举例来说特征向量和对应的类变量可以是:(参考数据集第一行)
X = (Rainy, Hot, High, False)
y = No
P(y|X)在这里的意思是,考虑到天气条件是“有雨”、“温度很热”、“高湿度”和“无风”,这时“不打高尔夫球”的概率。
现在对贝叶斯定理做一个简单的假设,也就是特征之间的独立性。我们把证据分成独立的部分。 现在,如果任意两个事件A和B是独立的, $$P(A,B) = P(A)P(B)$$
因此,我们得到:
$$ P\left(y \mid x_{1}, \ldots, x_{n}\right)=\frac{P\left(x_{1} \mid y\right) P\left(x_{2} \mid y\right) \ldots P\left(x_{n} \mid y\right) P(y)}{P\left(x_{1}\right) P\left(x_{2}\right) \ldots P\left(x_{n}\right)} $$进而可以表示为: $$ P\left(y \mid x_{1}, \ldots, x_{n}\right)=\frac{P(y) \prod \prod_{i=1}^{n} P\left(x_{i} \mid y\right)}{P\left(x_{1}\right) P\left(x_{2}\right) \ldots P\left(x_{n}\right)} $$
对于给定的输入,分母保持不变,我们可以去掉这一项: $$ P\left(y \mid x_{1}, \ldots, x_{n}\right) \propto P(y) \prod_{i=1}^{n} P\left(x_{i} \mid y\right) $$
现在,我们需要创建一个分类器模型。为此,我们找出类变量$y$的所有可能值的给定输入集的概率,并选取具有最大概率的输出。这可以用数学表示为:
$$ y=\operatorname{argmax}_{y} P(y) \prod_{i=1}^{n} P\left(x_{i} \mid y\right) $$最后,我们只剩下计算P(y)和$P(x_i| y)$.P(y)也被称为类概率,$P(x_i| y)$被称为条件概率。不同的朴素贝叶斯分类器的区别主要在于它们对$P(x_i| y)$的分布所作的假设。 让我们尝试在我们的天气数据集上手动应用上述公式。为此,我们需要对数据集进行一些预计算。 为X中的每个$x_i$和y中的每个$y_j$找到$P(x_i | y_j)$。所有这些计算都在下表中得到了证明:
在上图中,我们已经在表1-4中手工计算了$P(x_i | y_j)$对于每个$X$中的$x_i$和$y$中的$y_j$。例如,在温度较低的情况下打高尔夫球的概率,即$P(temp= cool | play golf = Yes) = 3/9$。
此外,我们需要找到类概率(P(y)),这已在表5中计算。例如,P(play golf = Yes) = 9/14。 现在,我们完成了预计算,分类器也准备好了!
让我们在一组新特征上测试它:
today = (Sunny, Hot, Normal, False)
因此,打高尔夫球的概率为: $$ P(Y e s \mid \text { today })=\frac{P(\text { SunnyOutlook } \mid Y \text { es }) P(\text { HotTemperature } \mid Y e s) P(\text { NormalHumidity } \mid Y \text { es }) P(\text { NoWind } \mid Y e s) P(Y e s)}{P(\text { today })} $$
不打高尔夫球的概率为: $$ P(N o \mid \text { today })=\frac{P(\text { SunnyOutlook } \mid N o) P(\text { HotTemperature } \mid N o) P(\text { NormalHumidity } \mid N o) P(N o W \text { ind } \mid N o) P(N o)}{P(\text { today })} $$
由于P(today)在两种概率中都有,我们可以忽略它,并找到比例概率如下: $$ P(\text { Yes } \mid \text { today }) \propto \frac{2}{9} \cdot \frac{2}{9} \cdot \frac{6}{9} \cdot \frac{6}{9} \cdot \frac{9}{14} \approx 0.0141 $$
$$ P(N o \mid \text { today }) \propto \frac{3}{5} \cdot \frac{2}{5} \cdot \frac{1}{5} \cdot \frac{2}{5} \cdot \frac{5}{14} \approx 0.0068 $$这两个数字可以通过使总和等于1(归一化)转换为概率: $$ P(Y e s \mid \text { today })=\frac{0.0141}{00141+00068}=0.67 $$
与之类似, $$ P(No \mid \text { today })=0.33 $$
所以 $$ P(Y e s \mid \text { today })>P(No \mid \text { today }) $$ 所以最后预测的结果是“Yes”。
在高斯朴素贝叶斯中,假设与每个特征相关的连续值按照高斯分布分布。高斯分布也称为正态分布。绘制时,得到一条关于特征值均值对称的钟形曲线,如下图所示:
假设特征的可能性为高斯分布,则条件概率为: $$ P\left(x_{i} \mid y\right)=\frac{1}{\sqrt{2 \pi \sigma_{y}^{2}}} \exp \left(-\frac{\left(x_{i}-\mu_{y}\right)^{2}}{2 \sigma_{y}^{2}}\right) $$
其他比较著名的朴素贝叶斯分类器有:
尽管朴素贝叶斯模型的假设明显过于简化,但朴素的贝叶斯分类器在许多真实世界的情况下都表现得不错,比如著名的文档分类和垃圾邮件过滤。只需要需要少量的训练数据就可以估计必要的参数。与更复杂的方法相比,朴素贝叶斯学习器和分类器运算速度快。
参考资料